package gops

import (
	"fmt"
	"github.com/manifoldco/promptui"
	"os"
)

// PromptRun 使用泛型定义
func PromptRun[T any](label string, items []T) (string, error) {
	// 实现提示
	// Label: 提示文本
	// Items: 提示选项, 切片中每个item可以是任意类型
	// RunPrompt函数现在是一个泛型函数，它接受一个类型参数T，这意味着你可以传递任何类型的切片给items参数。
	// 函数内部，我们将items从[]T转换为[]interface{}，因为promptui.Select的Items字段需要[]interface{}类型。
	interfaceItems := make([]interface{}, len(items))
	for i, v := range items {
		interfaceItems[i] = v
	}

	prompt := promptui.Select{
		Label: label,
		Items: interfaceItems,
	}

	_, result, err := prompt.Run()
	if err != nil {
		_, _ = fmt.Fprintf(os.Stderr, "Prompt failed %v\n", err)
		return "", err
	}

	return result, nil
}
